package cn.edu.scnu.util;

import com.auth0.jwt.JWT;
import com.auth0.jwt.algorithms.Algorithm;

import java.util.Date;
import java.util.Map;

/**
 * JWT工具类，用来生成和验证token，在登录成功时生成token，以后每次请求服务都会自动在请求中带上token
 * 然后用注册的全局拦截器LoginInterceptor进行拦截，只有token验证成功才能通过拦截
 */
public class JwtUitl {
    private static final String KEY = "DUIT";//密钥

    /**
     * 接收业务数据，生成token
     * @param claims
     * @return String
     */
    public static String genToken(Map<String, Object> claims){
        return JWT.create().withClaim("user", claims)//有效载荷
                .withExpiresAt(new Date(System.currentTimeMillis() + 1000*60*60*12))//过期时间：12小时
                .sign(Algorithm.HMAC256(KEY));//加密算法，KEY是密钥
    }

    /**
     * 接收token，验证token，返回业务数据
     * @param token
     * @return
     */
    public static Map<String, Object> parseToken(String token){
        return JWT.require(Algorithm.HMAC256(KEY)).build()//token验证器
                .verify(token)//解析token得到一个对象
                .getClaim("user")//取出对象中key=user的有效载荷
                .asMap();//作为Map
    }
}
